/*
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * Warning! This file is generated. Modify at your own risk.
 */

package com.google.api.services.gan.model;

import com.google.api.client.http.HttpHeaders;
import com.google.api.client.json.GenericJson;

/**
 * A credit card offer. There are many possible result fields. We provide two different views of the
 * data, or "projections." The "full" projection includes every result field. And the "summary"
 * projection, which is the default, includes a smaller subset of the fields. The fields included in
 * the summary projection are marked as such in their descriptions.
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Google Affiliate Network API. For a detailed
 * explanation see:
 * <a href="http://code.google.com/p/google-api-java-client/wiki/Json">http://code.google.com/p/google-api-java-client/wiki/Json</a>
 * </p>
 *
 * @author Google, Inc.
 */
public final class CcOffer extends GenericJson {

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String luggageInsurance;

  /**
   * The low end for credit limits the issuer imposes on recipients of this card.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Double creditLimitMin;

  /**
   * The issuer's name for the card, including any trademark or service mark designators. A summary
   * field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String cardName;

  /**
   * The high end for credit limits the issuer imposes on recipients of this card.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Double creditLimitMax;

  /**
   * Text describing the grace period before finance charges apply. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String gracePeriodDisplay;

  /**
   * This offer's ID. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String offerId;

  /**
   * For cards with rewards programs, the unit of reward. For example, miles, cash back, points.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String rewardUnit;

  /**
   * The lowest interest rate the issuer charges on this card. Expressed as an absolute number, not
   * as a percentage.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Double minPurchaseRate;

  /**
   * A list of what the issuer thinks are the most important benefits of the card. Usually
   * summarizes the rewards program, if there is one. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<String> cardBenefits;

  /**
   * For cards with rewards programs, detailed rules about how the program works.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<Rewards> rewards;

  static {
    // hack to force ProGuard to consider Rewards used, since otherwise it would be stripped out
    // see http://code.google.com/p/google-api-java-client/issues/detail?id=528
    com.google.api.client.util.Data.nullOf(Rewards.class);
  }

  /**
   * Whether a cash reward program lets you get cash back sooner than end of year or other longish
   * period.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Boolean offersImmediateCashReward;

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String travelInsurance;

  /**
   * Text describing the fee for a payment that doesn't clear. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String returnedPaymentFee;

  /**
   * The kind for one credit card offer. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String kind;

  /**
   * Name of card issuer. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String issuer;

  /**
   * The highest interest rate the issuer charges on this card. Expressed as an absolute number, not
   * as a percentage.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Double maxPurchaseRate;

  /**
   * Text describing how much missing the grace period will cost.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String minimumFinanceCharge;

  /**
   * Whether this card is only available to existing customers of the issuer.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Boolean existingCustomerOnly;

  /**
   * Text describing the annual fee, including any difference for the first year. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String annualFeeDisplay;

  /**
   * Fee for setting up the card.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String initialSetupAndProcessingFee;

  /**
   * The Google Affiliate Network ID of the advertiser making this offer.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String issuerId;

  /**
   * Text describing any additional details for the purchase rate. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String purchaseRateAdditionalDetails;

  /**
   * Categories in which the issuer does not wish the card to be displayed. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<String> prohibitedCategories;

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String fraudLiability;

  /**
   * Text describing the terms for cash advances. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String cashAdvanceTerms;

  /**
   * The link to the issuer's page for this card. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String landingPageUrl;

  /**
   * Text describing the terms for introductory period cash advances. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String introCashAdvanceTerms;

  /**
   * Whether accumulated rewards ever expire.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Boolean rewardsExpire;

  /**
   * Text describing the terms for introductory period purchases. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String introPurchaseTerms;

  /**
   * Fees for defaulting on your payments.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<DefaultFees> defaultFees;

  static {
    // hack to force ProGuard to consider DefaultFees used, since otherwise it would be stripped out
    // see http://code.google.com/p/google-api-java-client/issues/detail?id=528
    com.google.api.client.util.Data.nullOf(DefaultFees.class);
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String extendedWarranty;

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String emergencyInsurance;

  /**
   * The annual fee for the first year, if different from the ongoing fee. Optional.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Double firstYearAnnualFee;

  /**
   * The link to ping to register a click on this offer. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String trackingUrl;

  /**
   * Text describing how much a late payment will cost, eg "up to $35." A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String latePaymentFee;

  /**
   * Fee for exceeding the card's charge limit.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String overLimitFee;

  /**
   * What kind of credit card this is, for example secured or unsecured.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String cardType;

  /**
   * Possible categories for this card, eg "Low Interest" or "Good." A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<String> approvedCategories;

  /**
   * The company that redeems the rewards, if different from the issuer.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String rewardPartner;

  /**
   * Text describing the terms for introductory period balance transfers. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String introBalanceTransferTerms;

  /**
   * Fee for each transaction involving a foreign currency.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String foreignCurrencyTransactionFee;

  /**
   * The ongoing annual fee, in dollars.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Double annualFee;

  /**
   * The generic link to the issuer's site.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String issuerWebsite;

  /**
   * How often variable rates are updated.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String variableRatesUpdateFrequency;

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String carRentalInsurance;

  /**
   * More marketing copy about the card's benefits. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<String> additionalCardBenefits;

  /**
   * The youngest a recipient of this card may be.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Double ageMinimum;

  /**
   * Text describing how the balance is computed. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String balanceComputationMethod;

  /**
   * Text describing the purchase APR. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String aprDisplay;

  /**
   * Any extra fees levied on card holders.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String additionalCardHolderFee;

  /**
   * When variable rates were last updated.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String variableRatesLastUpdated;

  /**
   * Which network (eg Visa) the card belongs to. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String network;

  /**
   * Fixed or variable.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String purchaseRateType;

  /**
   * Fee for requesting a copy of your statement.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String statementCopyFee;

  /**
   * For airline miles rewards, tells whether blackout dates apply to the miles.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Boolean rewardsHaveBlackoutDates;

  /**
   * Text describing the credit ratings required for recipients of this card, for example
   * "Excellent/Good." A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String creditRatingDisplay;

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String flightAccidentInsurance;

  /**
   * The largest number of units you may accumulate in a year.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Double annualRewardMaximum;

  /**
   * Text describing the terms for balance transfers. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String balanceTransferTerms;

  /**
   * For cards with rewards programs, extra circumstances whereby additional rewards may be granted.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<BonusRewards> bonusRewards;

  static {
    // hack to force ProGuard to consider BonusRewards used, since otherwise it would be stripped out
    // see http://code.google.com/p/google-api-java-client/issues/detail?id=528
    com.google.api.client.util.Data.nullOf(BonusRewards.class);
  }

  /**
   * The link to the image of the card that is shown on Connect Commerce. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String imageUrl;

  /**
   * Text describing the details of the age minimum restriction.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String ageMinimumDetails;

  /**
   * A notice that, if present, is referenced via an asterisk by many of the other summary fields.
   * If this field is present, it will always start with an asterisk ("*"), and must be prominently
   * displayed with the offer. A summary field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String disclaimer;

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value returned may be {@code null}.
   */
  public String getLuggageInsurance() {
    return luggageInsurance;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value set may be {@code null}.
   */
  public CcOffer setLuggageInsurance(String luggageInsurance) {
    this.luggageInsurance = luggageInsurance;
    return this;
  }

  /**
   * The low end for credit limits the issuer imposes on recipients of this card.
   * The value returned may be {@code null}.
   */
  public Double getCreditLimitMin() {
    return creditLimitMin;
  }

  /**
   * The low end for credit limits the issuer imposes on recipients of this card.
   * The value set may be {@code null}.
   */
  public CcOffer setCreditLimitMin(Double creditLimitMin) {
    this.creditLimitMin = creditLimitMin;
    return this;
  }

  /**
   * The issuer's name for the card, including any trademark or service mark designators. A summary
   * field.
   * The value returned may be {@code null}.
   */
  public String getCardName() {
    return cardName;
  }

  /**
   * The issuer's name for the card, including any trademark or service mark designators. A summary
   * field.
   * The value set may be {@code null}.
   */
  public CcOffer setCardName(String cardName) {
    this.cardName = cardName;
    return this;
  }

  /**
   * The high end for credit limits the issuer imposes on recipients of this card.
   * The value returned may be {@code null}.
   */
  public Double getCreditLimitMax() {
    return creditLimitMax;
  }

  /**
   * The high end for credit limits the issuer imposes on recipients of this card.
   * The value set may be {@code null}.
   */
  public CcOffer setCreditLimitMax(Double creditLimitMax) {
    this.creditLimitMax = creditLimitMax;
    return this;
  }

  /**
   * Text describing the grace period before finance charges apply. A summary field.
   * The value returned may be {@code null}.
   */
  public String getGracePeriodDisplay() {
    return gracePeriodDisplay;
  }

  /**
   * Text describing the grace period before finance charges apply. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setGracePeriodDisplay(String gracePeriodDisplay) {
    this.gracePeriodDisplay = gracePeriodDisplay;
    return this;
  }

  /**
   * This offer's ID. A summary field.
   * The value returned may be {@code null}.
   */
  public String getOfferId() {
    return offerId;
  }

  /**
   * This offer's ID. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setOfferId(String offerId) {
    this.offerId = offerId;
    return this;
  }

  /**
   * For cards with rewards programs, the unit of reward. For example, miles, cash back, points.
   * The value returned may be {@code null}.
   */
  public String getRewardUnit() {
    return rewardUnit;
  }

  /**
   * For cards with rewards programs, the unit of reward. For example, miles, cash back, points.
   * The value set may be {@code null}.
   */
  public CcOffer setRewardUnit(String rewardUnit) {
    this.rewardUnit = rewardUnit;
    return this;
  }

  /**
   * The lowest interest rate the issuer charges on this card. Expressed as an absolute number, not
   * as a percentage.
   * The value returned may be {@code null}.
   */
  public Double getMinPurchaseRate() {
    return minPurchaseRate;
  }

  /**
   * The lowest interest rate the issuer charges on this card. Expressed as an absolute number, not
   * as a percentage.
   * The value set may be {@code null}.
   */
  public CcOffer setMinPurchaseRate(Double minPurchaseRate) {
    this.minPurchaseRate = minPurchaseRate;
    return this;
  }

  /**
   * A list of what the issuer thinks are the most important benefits of the card. Usually
   * summarizes the rewards program, if there is one. A summary field.
   * The value returned may be {@code null}.
   */
  public java.util.List<String> getCardBenefits() {
    return cardBenefits;
  }

  /**
   * A list of what the issuer thinks are the most important benefits of the card. Usually
   * summarizes the rewards program, if there is one. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setCardBenefits(java.util.List<String> cardBenefits) {
    this.cardBenefits = cardBenefits;
    return this;
  }

  /**
   * For cards with rewards programs, detailed rules about how the program works.
   * The value returned may be {@code null}.
   */
  public java.util.List<Rewards> getRewards() {
    return rewards;
  }

  /**
   * For cards with rewards programs, detailed rules about how the program works.
   * The value set may be {@code null}.
   */
  public CcOffer setRewards(java.util.List<Rewards> rewards) {
    this.rewards = rewards;
    return this;
  }

  /**
   * Whether a cash reward program lets you get cash back sooner than end of year or other longish
   * period.
   * The value returned may be {@code null}.
   */
  public Boolean getOffersImmediateCashReward() {
    return offersImmediateCashReward;
  }

  /**
   * Whether a cash reward program lets you get cash back sooner than end of year or other longish
   * period.
   * The value set may be {@code null}.
   */
  public CcOffer setOffersImmediateCashReward(Boolean offersImmediateCashReward) {
    this.offersImmediateCashReward = offersImmediateCashReward;
    return this;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value returned may be {@code null}.
   */
  public String getTravelInsurance() {
    return travelInsurance;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value set may be {@code null}.
   */
  public CcOffer setTravelInsurance(String travelInsurance) {
    this.travelInsurance = travelInsurance;
    return this;
  }

  /**
   * Text describing the fee for a payment that doesn't clear. A summary field.
   * The value returned may be {@code null}.
   */
  public String getReturnedPaymentFee() {
    return returnedPaymentFee;
  }

  /**
   * Text describing the fee for a payment that doesn't clear. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setReturnedPaymentFee(String returnedPaymentFee) {
    this.returnedPaymentFee = returnedPaymentFee;
    return this;
  }

  /**
   * The kind for one credit card offer. A summary field.
   * The value returned may be {@code null}.
   */
  public String getKind() {
    return kind;
  }

  /**
   * The kind for one credit card offer. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setKind(String kind) {
    this.kind = kind;
    return this;
  }

  /**
   * Name of card issuer. A summary field.
   * The value returned may be {@code null}.
   */
  public String getIssuer() {
    return issuer;
  }

  /**
   * Name of card issuer. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setIssuer(String issuer) {
    this.issuer = issuer;
    return this;
  }

  /**
   * The highest interest rate the issuer charges on this card. Expressed as an absolute number, not
   * as a percentage.
   * The value returned may be {@code null}.
   */
  public Double getMaxPurchaseRate() {
    return maxPurchaseRate;
  }

  /**
   * The highest interest rate the issuer charges on this card. Expressed as an absolute number, not
   * as a percentage.
   * The value set may be {@code null}.
   */
  public CcOffer setMaxPurchaseRate(Double maxPurchaseRate) {
    this.maxPurchaseRate = maxPurchaseRate;
    return this;
  }

  /**
   * Text describing how much missing the grace period will cost.
   * The value returned may be {@code null}.
   */
  public String getMinimumFinanceCharge() {
    return minimumFinanceCharge;
  }

  /**
   * Text describing how much missing the grace period will cost.
   * The value set may be {@code null}.
   */
  public CcOffer setMinimumFinanceCharge(String minimumFinanceCharge) {
    this.minimumFinanceCharge = minimumFinanceCharge;
    return this;
  }

  /**
   * Whether this card is only available to existing customers of the issuer.
   * The value returned may be {@code null}.
   */
  public Boolean getExistingCustomerOnly() {
    return existingCustomerOnly;
  }

  /**
   * Whether this card is only available to existing customers of the issuer.
   * The value set may be {@code null}.
   */
  public CcOffer setExistingCustomerOnly(Boolean existingCustomerOnly) {
    this.existingCustomerOnly = existingCustomerOnly;
    return this;
  }

  /**
   * Text describing the annual fee, including any difference for the first year. A summary field.
   * The value returned may be {@code null}.
   */
  public String getAnnualFeeDisplay() {
    return annualFeeDisplay;
  }

  /**
   * Text describing the annual fee, including any difference for the first year. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setAnnualFeeDisplay(String annualFeeDisplay) {
    this.annualFeeDisplay = annualFeeDisplay;
    return this;
  }

  /**
   * Fee for setting up the card.
   * The value returned may be {@code null}.
   */
  public String getInitialSetupAndProcessingFee() {
    return initialSetupAndProcessingFee;
  }

  /**
   * Fee for setting up the card.
   * The value set may be {@code null}.
   */
  public CcOffer setInitialSetupAndProcessingFee(String initialSetupAndProcessingFee) {
    this.initialSetupAndProcessingFee = initialSetupAndProcessingFee;
    return this;
  }

  /**
   * The Google Affiliate Network ID of the advertiser making this offer.
   * The value returned may be {@code null}.
   */
  public String getIssuerId() {
    return issuerId;
  }

  /**
   * The Google Affiliate Network ID of the advertiser making this offer.
   * The value set may be {@code null}.
   */
  public CcOffer setIssuerId(String issuerId) {
    this.issuerId = issuerId;
    return this;
  }

  /**
   * Text describing any additional details for the purchase rate. A summary field.
   * The value returned may be {@code null}.
   */
  public String getPurchaseRateAdditionalDetails() {
    return purchaseRateAdditionalDetails;
  }

  /**
   * Text describing any additional details for the purchase rate. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setPurchaseRateAdditionalDetails(String purchaseRateAdditionalDetails) {
    this.purchaseRateAdditionalDetails = purchaseRateAdditionalDetails;
    return this;
  }

  /**
   * Categories in which the issuer does not wish the card to be displayed. A summary field.
   * The value returned may be {@code null}.
   */
  public java.util.List<String> getProhibitedCategories() {
    return prohibitedCategories;
  }

  /**
   * Categories in which the issuer does not wish the card to be displayed. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setProhibitedCategories(java.util.List<String> prohibitedCategories) {
    this.prohibitedCategories = prohibitedCategories;
    return this;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value returned may be {@code null}.
   */
  public String getFraudLiability() {
    return fraudLiability;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value set may be {@code null}.
   */
  public CcOffer setFraudLiability(String fraudLiability) {
    this.fraudLiability = fraudLiability;
    return this;
  }

  /**
   * Text describing the terms for cash advances. A summary field.
   * The value returned may be {@code null}.
   */
  public String getCashAdvanceTerms() {
    return cashAdvanceTerms;
  }

  /**
   * Text describing the terms for cash advances. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setCashAdvanceTerms(String cashAdvanceTerms) {
    this.cashAdvanceTerms = cashAdvanceTerms;
    return this;
  }

  /**
   * The link to the issuer's page for this card. A summary field.
   * The value returned may be {@code null}.
   */
  public String getLandingPageUrl() {
    return landingPageUrl;
  }

  /**
   * The link to the issuer's page for this card. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setLandingPageUrl(String landingPageUrl) {
    this.landingPageUrl = landingPageUrl;
    return this;
  }

  /**
   * Text describing the terms for introductory period cash advances. A summary field.
   * The value returned may be {@code null}.
   */
  public String getIntroCashAdvanceTerms() {
    return introCashAdvanceTerms;
  }

  /**
   * Text describing the terms for introductory period cash advances. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setIntroCashAdvanceTerms(String introCashAdvanceTerms) {
    this.introCashAdvanceTerms = introCashAdvanceTerms;
    return this;
  }

  /**
   * Whether accumulated rewards ever expire.
   * The value returned may be {@code null}.
   */
  public Boolean getRewardsExpire() {
    return rewardsExpire;
  }

  /**
   * Whether accumulated rewards ever expire.
   * The value set may be {@code null}.
   */
  public CcOffer setRewardsExpire(Boolean rewardsExpire) {
    this.rewardsExpire = rewardsExpire;
    return this;
  }

  /**
   * Text describing the terms for introductory period purchases. A summary field.
   * The value returned may be {@code null}.
   */
  public String getIntroPurchaseTerms() {
    return introPurchaseTerms;
  }

  /**
   * Text describing the terms for introductory period purchases. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setIntroPurchaseTerms(String introPurchaseTerms) {
    this.introPurchaseTerms = introPurchaseTerms;
    return this;
  }

  /**
   * Fees for defaulting on your payments.
   * The value returned may be {@code null}.
   */
  public java.util.List<DefaultFees> getDefaultFees() {
    return defaultFees;
  }

  /**
   * Fees for defaulting on your payments.
   * The value set may be {@code null}.
   */
  public CcOffer setDefaultFees(java.util.List<DefaultFees> defaultFees) {
    this.defaultFees = defaultFees;
    return this;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value returned may be {@code null}.
   */
  public String getExtendedWarranty() {
    return extendedWarranty;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value set may be {@code null}.
   */
  public CcOffer setExtendedWarranty(String extendedWarranty) {
    this.extendedWarranty = extendedWarranty;
    return this;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value returned may be {@code null}.
   */
  public String getEmergencyInsurance() {
    return emergencyInsurance;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value set may be {@code null}.
   */
  public CcOffer setEmergencyInsurance(String emergencyInsurance) {
    this.emergencyInsurance = emergencyInsurance;
    return this;
  }

  /**
   * The annual fee for the first year, if different from the ongoing fee. Optional.
   * The value returned may be {@code null}.
   */
  public Double getFirstYearAnnualFee() {
    return firstYearAnnualFee;
  }

  /**
   * The annual fee for the first year, if different from the ongoing fee. Optional.
   * The value set may be {@code null}.
   */
  public CcOffer setFirstYearAnnualFee(Double firstYearAnnualFee) {
    this.firstYearAnnualFee = firstYearAnnualFee;
    return this;
  }

  /**
   * The link to ping to register a click on this offer. A summary field.
   * The value returned may be {@code null}.
   */
  public String getTrackingUrl() {
    return trackingUrl;
  }

  /**
   * The link to ping to register a click on this offer. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setTrackingUrl(String trackingUrl) {
    this.trackingUrl = trackingUrl;
    return this;
  }

  /**
   * Text describing how much a late payment will cost, eg "up to $35." A summary field.
   * The value returned may be {@code null}.
   */
  public String getLatePaymentFee() {
    return latePaymentFee;
  }

  /**
   * Text describing how much a late payment will cost, eg "up to $35." A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setLatePaymentFee(String latePaymentFee) {
    this.latePaymentFee = latePaymentFee;
    return this;
  }

  /**
   * Fee for exceeding the card's charge limit.
   * The value returned may be {@code null}.
   */
  public String getOverLimitFee() {
    return overLimitFee;
  }

  /**
   * Fee for exceeding the card's charge limit.
   * The value set may be {@code null}.
   */
  public CcOffer setOverLimitFee(String overLimitFee) {
    this.overLimitFee = overLimitFee;
    return this;
  }

  /**
   * What kind of credit card this is, for example secured or unsecured.
   * The value returned may be {@code null}.
   */
  public String getCardType() {
    return cardType;
  }

  /**
   * What kind of credit card this is, for example secured or unsecured.
   * The value set may be {@code null}.
   */
  public CcOffer setCardType(String cardType) {
    this.cardType = cardType;
    return this;
  }

  /**
   * Possible categories for this card, eg "Low Interest" or "Good." A summary field.
   * The value returned may be {@code null}.
   */
  public java.util.List<String> getApprovedCategories() {
    return approvedCategories;
  }

  /**
   * Possible categories for this card, eg "Low Interest" or "Good." A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setApprovedCategories(java.util.List<String> approvedCategories) {
    this.approvedCategories = approvedCategories;
    return this;
  }

  /**
   * The company that redeems the rewards, if different from the issuer.
   * The value returned may be {@code null}.
   */
  public String getRewardPartner() {
    return rewardPartner;
  }

  /**
   * The company that redeems the rewards, if different from the issuer.
   * The value set may be {@code null}.
   */
  public CcOffer setRewardPartner(String rewardPartner) {
    this.rewardPartner = rewardPartner;
    return this;
  }

  /**
   * Text describing the terms for introductory period balance transfers. A summary field.
   * The value returned may be {@code null}.
   */
  public String getIntroBalanceTransferTerms() {
    return introBalanceTransferTerms;
  }

  /**
   * Text describing the terms for introductory period balance transfers. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setIntroBalanceTransferTerms(String introBalanceTransferTerms) {
    this.introBalanceTransferTerms = introBalanceTransferTerms;
    return this;
  }

  /**
   * Fee for each transaction involving a foreign currency.
   * The value returned may be {@code null}.
   */
  public String getForeignCurrencyTransactionFee() {
    return foreignCurrencyTransactionFee;
  }

  /**
   * Fee for each transaction involving a foreign currency.
   * The value set may be {@code null}.
   */
  public CcOffer setForeignCurrencyTransactionFee(String foreignCurrencyTransactionFee) {
    this.foreignCurrencyTransactionFee = foreignCurrencyTransactionFee;
    return this;
  }

  /**
   * The ongoing annual fee, in dollars.
   * The value returned may be {@code null}.
   */
  public Double getAnnualFee() {
    return annualFee;
  }

  /**
   * The ongoing annual fee, in dollars.
   * The value set may be {@code null}.
   */
  public CcOffer setAnnualFee(Double annualFee) {
    this.annualFee = annualFee;
    return this;
  }

  /**
   * The generic link to the issuer's site.
   * The value returned may be {@code null}.
   */
  public String getIssuerWebsite() {
    return issuerWebsite;
  }

  /**
   * The generic link to the issuer's site.
   * The value set may be {@code null}.
   */
  public CcOffer setIssuerWebsite(String issuerWebsite) {
    this.issuerWebsite = issuerWebsite;
    return this;
  }

  /**
   * How often variable rates are updated.
   * The value returned may be {@code null}.
   */
  public String getVariableRatesUpdateFrequency() {
    return variableRatesUpdateFrequency;
  }

  /**
   * How often variable rates are updated.
   * The value set may be {@code null}.
   */
  public CcOffer setVariableRatesUpdateFrequency(String variableRatesUpdateFrequency) {
    this.variableRatesUpdateFrequency = variableRatesUpdateFrequency;
    return this;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value returned may be {@code null}.
   */
  public String getCarRentalInsurance() {
    return carRentalInsurance;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value set may be {@code null}.
   */
  public CcOffer setCarRentalInsurance(String carRentalInsurance) {
    this.carRentalInsurance = carRentalInsurance;
    return this;
  }

  /**
   * More marketing copy about the card's benefits. A summary field.
   * The value returned may be {@code null}.
   */
  public java.util.List<String> getAdditionalCardBenefits() {
    return additionalCardBenefits;
  }

  /**
   * More marketing copy about the card's benefits. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setAdditionalCardBenefits(java.util.List<String> additionalCardBenefits) {
    this.additionalCardBenefits = additionalCardBenefits;
    return this;
  }

  /**
   * The youngest a recipient of this card may be.
   * The value returned may be {@code null}.
   */
  public Double getAgeMinimum() {
    return ageMinimum;
  }

  /**
   * The youngest a recipient of this card may be.
   * The value set may be {@code null}.
   */
  public CcOffer setAgeMinimum(Double ageMinimum) {
    this.ageMinimum = ageMinimum;
    return this;
  }

  /**
   * Text describing how the balance is computed. A summary field.
   * The value returned may be {@code null}.
   */
  public String getBalanceComputationMethod() {
    return balanceComputationMethod;
  }

  /**
   * Text describing how the balance is computed. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setBalanceComputationMethod(String balanceComputationMethod) {
    this.balanceComputationMethod = balanceComputationMethod;
    return this;
  }

  /**
   * Text describing the purchase APR. A summary field.
   * The value returned may be {@code null}.
   */
  public String getAprDisplay() {
    return aprDisplay;
  }

  /**
   * Text describing the purchase APR. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setAprDisplay(String aprDisplay) {
    this.aprDisplay = aprDisplay;
    return this;
  }

  /**
   * Any extra fees levied on card holders.
   * The value returned may be {@code null}.
   */
  public String getAdditionalCardHolderFee() {
    return additionalCardHolderFee;
  }

  /**
   * Any extra fees levied on card holders.
   * The value set may be {@code null}.
   */
  public CcOffer setAdditionalCardHolderFee(String additionalCardHolderFee) {
    this.additionalCardHolderFee = additionalCardHolderFee;
    return this;
  }

  /**
   * When variable rates were last updated.
   * The value returned may be {@code null}.
   */
  public String getVariableRatesLastUpdated() {
    return variableRatesLastUpdated;
  }

  /**
   * When variable rates were last updated.
   * The value set may be {@code null}.
   */
  public CcOffer setVariableRatesLastUpdated(String variableRatesLastUpdated) {
    this.variableRatesLastUpdated = variableRatesLastUpdated;
    return this;
  }

  /**
   * Which network (eg Visa) the card belongs to. A summary field.
   * The value returned may be {@code null}.
   */
  public String getNetwork() {
    return network;
  }

  /**
   * Which network (eg Visa) the card belongs to. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setNetwork(String network) {
    this.network = network;
    return this;
  }

  /**
   * Fixed or variable.
   * The value returned may be {@code null}.
   */
  public String getPurchaseRateType() {
    return purchaseRateType;
  }

  /**
   * Fixed or variable.
   * The value set may be {@code null}.
   */
  public CcOffer setPurchaseRateType(String purchaseRateType) {
    this.purchaseRateType = purchaseRateType;
    return this;
  }

  /**
   * Fee for requesting a copy of your statement.
   * The value returned may be {@code null}.
   */
  public String getStatementCopyFee() {
    return statementCopyFee;
  }

  /**
   * Fee for requesting a copy of your statement.
   * The value set may be {@code null}.
   */
  public CcOffer setStatementCopyFee(String statementCopyFee) {
    this.statementCopyFee = statementCopyFee;
    return this;
  }

  /**
   * For airline miles rewards, tells whether blackout dates apply to the miles.
   * The value returned may be {@code null}.
   */
  public Boolean getRewardsHaveBlackoutDates() {
    return rewardsHaveBlackoutDates;
  }

  /**
   * For airline miles rewards, tells whether blackout dates apply to the miles.
   * The value set may be {@code null}.
   */
  public CcOffer setRewardsHaveBlackoutDates(Boolean rewardsHaveBlackoutDates) {
    this.rewardsHaveBlackoutDates = rewardsHaveBlackoutDates;
    return this;
  }

  /**
   * Text describing the credit ratings required for recipients of this card, for example
   * "Excellent/Good." A summary field.
   * The value returned may be {@code null}.
   */
  public String getCreditRatingDisplay() {
    return creditRatingDisplay;
  }

  /**
   * Text describing the credit ratings required for recipients of this card, for example
   * "Excellent/Good." A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setCreditRatingDisplay(String creditRatingDisplay) {
    this.creditRatingDisplay = creditRatingDisplay;
    return this;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value returned may be {@code null}.
   */
  public String getFlightAccidentInsurance() {
    return flightAccidentInsurance;
  }

  /**
   * If you get coverage when you use the card for the given activity, this field describes it.
   * The value set may be {@code null}.
   */
  public CcOffer setFlightAccidentInsurance(String flightAccidentInsurance) {
    this.flightAccidentInsurance = flightAccidentInsurance;
    return this;
  }

  /**
   * The largest number of units you may accumulate in a year.
   * The value returned may be {@code null}.
   */
  public Double getAnnualRewardMaximum() {
    return annualRewardMaximum;
  }

  /**
   * The largest number of units you may accumulate in a year.
   * The value set may be {@code null}.
   */
  public CcOffer setAnnualRewardMaximum(Double annualRewardMaximum) {
    this.annualRewardMaximum = annualRewardMaximum;
    return this;
  }

  /**
   * Text describing the terms for balance transfers. A summary field.
   * The value returned may be {@code null}.
   */
  public String getBalanceTransferTerms() {
    return balanceTransferTerms;
  }

  /**
   * Text describing the terms for balance transfers. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setBalanceTransferTerms(String balanceTransferTerms) {
    this.balanceTransferTerms = balanceTransferTerms;
    return this;
  }

  /**
   * For cards with rewards programs, extra circumstances whereby additional rewards may be granted.
   * The value returned may be {@code null}.
   */
  public java.util.List<BonusRewards> getBonusRewards() {
    return bonusRewards;
  }

  /**
   * For cards with rewards programs, extra circumstances whereby additional rewards may be granted.
   * The value set may be {@code null}.
   */
  public CcOffer setBonusRewards(java.util.List<BonusRewards> bonusRewards) {
    this.bonusRewards = bonusRewards;
    return this;
  }

  /**
   * The link to the image of the card that is shown on Connect Commerce. A summary field.
   * The value returned may be {@code null}.
   */
  public String getImageUrl() {
    return imageUrl;
  }

  /**
   * The link to the image of the card that is shown on Connect Commerce. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
    return this;
  }

  /**
   * Text describing the details of the age minimum restriction.
   * The value returned may be {@code null}.
   */
  public String getAgeMinimumDetails() {
    return ageMinimumDetails;
  }

  /**
   * Text describing the details of the age minimum restriction.
   * The value set may be {@code null}.
   */
  public CcOffer setAgeMinimumDetails(String ageMinimumDetails) {
    this.ageMinimumDetails = ageMinimumDetails;
    return this;
  }

  /**
   * A notice that, if present, is referenced via an asterisk by many of the other summary fields.
   * If this field is present, it will always start with an asterisk ("*"), and must be prominently
   * displayed with the offer. A summary field.
   * The value returned may be {@code null}.
   */
  public String getDisclaimer() {
    return disclaimer;
  }

  /**
   * A notice that, if present, is referenced via an asterisk by many of the other summary fields.
   * If this field is present, it will always start with an asterisk ("*"), and must be prominently
   * displayed with the offer. A summary field.
   * The value set may be {@code null}.
   */
  public CcOffer setDisclaimer(String disclaimer) {
    this.disclaimer = disclaimer;
    return this;
  }

  private HttpHeaders responseHeaders;

  /**
   * Sets the HTTP headers returned with the server response, or <code>null</code>.
   *
   * This member should only be non-null if this object was the top level element of a response. For
   * example, a request that returns a single {@link CcOffer} would include the response headers,
   * while a request which returns an array of {@link CcOffer}, would have a non-null response
   * header in the enclosing object only.
   */
  public void setResponseHeaders(HttpHeaders responseHeaders) {
    this.responseHeaders = responseHeaders;
  }

  /**
   * Returns the HTTP headers that were returned with the server response, or
   * <code>null</code>.
   */
  public HttpHeaders getResponseHeaders() {
    return responseHeaders;
  }

  /**
   * Model definition for CcOfferRewards.
   */
  public static final class Rewards extends GenericJson {

    /**
     * The kind of purchases covered by this rule.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private String category;

    /**
     * The minimum purchase amount in the given category before this rule applies.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private Double minRewardTier;

    /**
     * The maximum purchase amount in the given category for this rule to apply.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private Double maxRewardTier;

    /**
     * How long rewards granted by this rule last.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private Double expirationMonths;

    /**
     * The number of units rewarded per purchase dollar.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private Double amount;

    /**
     * Other limits, for example, if this rule only applies during an introductory period.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private String additionalDetails;

    /**
     * The kind of purchases covered by this rule.
     * The value returned may be {@code null}.
     */
    public String getCategory() {
      return category;
    }

    /**
     * The kind of purchases covered by this rule.
     * The value set may be {@code null}.
     */
    public Rewards setCategory(String category) {
      this.category = category;
      return this;
    }

    /**
     * The minimum purchase amount in the given category before this rule applies.
     * The value returned may be {@code null}.
     */
    public Double getMinRewardTier() {
      return minRewardTier;
    }

    /**
     * The minimum purchase amount in the given category before this rule applies.
     * The value set may be {@code null}.
     */
    public Rewards setMinRewardTier(Double minRewardTier) {
      this.minRewardTier = minRewardTier;
      return this;
    }

    /**
     * The maximum purchase amount in the given category for this rule to apply.
     * The value returned may be {@code null}.
     */
    public Double getMaxRewardTier() {
      return maxRewardTier;
    }

    /**
     * The maximum purchase amount in the given category for this rule to apply.
     * The value set may be {@code null}.
     */
    public Rewards setMaxRewardTier(Double maxRewardTier) {
      this.maxRewardTier = maxRewardTier;
      return this;
    }

    /**
     * How long rewards granted by this rule last.
     * The value returned may be {@code null}.
     */
    public Double getExpirationMonths() {
      return expirationMonths;
    }

    /**
     * How long rewards granted by this rule last.
     * The value set may be {@code null}.
     */
    public Rewards setExpirationMonths(Double expirationMonths) {
      this.expirationMonths = expirationMonths;
      return this;
    }

    /**
     * The number of units rewarded per purchase dollar.
     * The value returned may be {@code null}.
     */
    public Double getAmount() {
      return amount;
    }

    /**
     * The number of units rewarded per purchase dollar.
     * The value set may be {@code null}.
     */
    public Rewards setAmount(Double amount) {
      this.amount = amount;
      return this;
    }

    /**
     * Other limits, for example, if this rule only applies during an introductory period.
     * The value returned may be {@code null}.
     */
    public String getAdditionalDetails() {
      return additionalDetails;
    }

    /**
     * Other limits, for example, if this rule only applies during an introductory period.
     * The value set may be {@code null}.
     */
    public Rewards setAdditionalDetails(String additionalDetails) {
      this.additionalDetails = additionalDetails;
      return this;
    }

  }

  /**
   * Model definition for CcOfferDefaultFees.
   */
  public static final class DefaultFees extends GenericJson {

    /**
     * The type of charge, for example Purchases.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private String category;

    /**
     * The highest rate the issuer may charge for defaulting on debt in this category. Expressed as an
     * absolute number, not as a percentage.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private Double maxRate;

    /**
     * The lowest rate the issuer may charge for defaulting on debt in this category. Expressed as an
     * absolute number, not as a percentage.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private Double minRate;

    /**
     * Fixed or variable.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private String rateType;

    /**
     * The type of charge, for example Purchases.
     * The value returned may be {@code null}.
     */
    public String getCategory() {
      return category;
    }

    /**
     * The type of charge, for example Purchases.
     * The value set may be {@code null}.
     */
    public DefaultFees setCategory(String category) {
      this.category = category;
      return this;
    }

    /**
     * The highest rate the issuer may charge for defaulting on debt in this category. Expressed as an
     * absolute number, not as a percentage.
     * The value returned may be {@code null}.
     */
    public Double getMaxRate() {
      return maxRate;
    }

    /**
     * The highest rate the issuer may charge for defaulting on debt in this category. Expressed as an
     * absolute number, not as a percentage.
     * The value set may be {@code null}.
     */
    public DefaultFees setMaxRate(Double maxRate) {
      this.maxRate = maxRate;
      return this;
    }

    /**
     * The lowest rate the issuer may charge for defaulting on debt in this category. Expressed as an
     * absolute number, not as a percentage.
     * The value returned may be {@code null}.
     */
    public Double getMinRate() {
      return minRate;
    }

    /**
     * The lowest rate the issuer may charge for defaulting on debt in this category. Expressed as an
     * absolute number, not as a percentage.
     * The value set may be {@code null}.
     */
    public DefaultFees setMinRate(Double minRate) {
      this.minRate = minRate;
      return this;
    }

    /**
     * Fixed or variable.
     * The value returned may be {@code null}.
     */
    public String getRateType() {
      return rateType;
    }

    /**
     * Fixed or variable.
     * The value set may be {@code null}.
     */
    public DefaultFees setRateType(String rateType) {
      this.rateType = rateType;
      return this;
    }

  }

  /**
   * Model definition for CcOfferBonusRewards.
   */
  public static final class BonusRewards extends GenericJson {

    /**
     * How many units of reward will be granted.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private Double amount;

    /**
     * The circumstances under which this rule applies, for example, booking a flight via Orbitz.
     * The value may be {@code null}.
     */
    @com.google.api.client.util.Key
    private String details;

    /**
     * How many units of reward will be granted.
     * The value returned may be {@code null}.
     */
    public Double getAmount() {
      return amount;
    }

    /**
     * How many units of reward will be granted.
     * The value set may be {@code null}.
     */
    public BonusRewards setAmount(Double amount) {
      this.amount = amount;
      return this;
    }

    /**
     * The circumstances under which this rule applies, for example, booking a flight via Orbitz.
     * The value returned may be {@code null}.
     */
    public String getDetails() {
      return details;
    }

    /**
     * The circumstances under which this rule applies, for example, booking a flight via Orbitz.
     * The value set may be {@code null}.
     */
    public BonusRewards setDetails(String details) {
      this.details = details;
      return this;
    }

  }

}
